怎么取消表格mousedown事件的冒泡
问题描述
在我的业务场景中需要对表格整体进行拖拽来移动位置,但是如果鼠标点在单元格上拖拽会触发表格的框选交互,这样我就预期不进行整表拖拽了,当鼠标点在表格空白区域再响应整表拖拽行为。
基于这个需求背景,怎么判断是点击在了单元格上还是表格空白区域呢?
解决方案
在 VTable 中可以通过监听mousedown_cell事件来处理这个问题,不过需要注意的是VTable内部都是监听的pointer事件哦!
所以如果直接取消冒泡,也仅能取消pointerdown事件。
tableInstance.on('mousedown_cell', arg => {
arg.event.stopPropagation();
});
所以需要再监听mousedown来判断组织事件,正确处理可以看下面示例:
代码示例
const tableInstance = new VTable.ListTable(option);
window.tableInstance = tableInstance;
let isPointerDownOnTable = false;
tableInstance.on('mousedown_cell', arg => {
isPointerDownOnTable = true;
setTimeout(() => {
isPointerDownOnTable = false;
}, 0);
arg.event?.stopPropagation();
});
tableInstance.getElement().addEventListener('mousedown', e => {
if (isPointerDownOnTable) {
e.stopPropagation();
}
});